package org.everyday;

/**
 * @Author: Tang World
 * @Date: 13/9/2022 下午1:45
 */
public class L670M {
    public static void main(String[] args) {
        int i = new L670M().maximumSwap(98368);
    }

    public int maximumSwap(int num) {
        // 思路：两轮遍历，遇到升序即交换，最多交换一次，如果遇到多个符合升序的结果，那么交换距离最远的
        if (num % 10 == num) return num;// 个位数直接返回

        char[] arr = String.valueOf(num).toCharArray();
        for (int i = 0; i < arr.length; i++) {
            // 从i后面选择一个最大的，这个最大的离i越远越好，比如1993，1交换第二个9更优
            int maxIndex = i;
            for (int j = i + 1; j <= arr.length - 1; j++) {
                if (arr[j] >= arr[maxIndex]) {
                    maxIndex = j;
                }
            }

            if (maxIndex != i && arr[i] != arr[maxIndex]) {
                char tmp = arr[i];
                arr[i] = arr[maxIndex];
                arr[maxIndex] = tmp;
                return Integer.parseInt(new String(arr));
            }
        }

        return num;
    }
}
